package com.hxy.subject.common.entity;

import com.hxy.subject.common.enums.RestCode;
import lombok.Data;

/**
 * @Author haoxuyang
 * @Date 2024/9/2 18:59
 */
@Data
public class Result<T> {

    /**
     * 状态码
     */
    private Integer code;

    /**
     * 消息
     */
    private String message;

    /**
     * 接口状态
     */
    private Boolean success;

    /**
     * 数据
     */
    private T data;

    /**
     * 初始化一个新创建的 Result 对象，使其表示一个空消息。
     */
    public Result() {
    }

    /**
     * 初始化一个新创建的 Result 对象
     *
     * @param code    状态码
     * @param message 返回内容
     */
    public Result(int code, String message) {
        this.code = code;
        this.message = message;
        this.data = null;
    }

    /**
     * 初始化一个新创建的 Result 对象
     *
     * @param code 状态码
     * @param message  返回内容
     * @param data 数据对象
     */
    public Result(int code, T data, String message) {
        this.code = code;
        this.message = message;
        if ((data != null)) {
            this.data = data;
        }
    }

    public Result(T data) {
        this.code = RestCode.SUCCESS.getCode();
        this.message = RestCode.SUCCESS.getMessage();
        this.data = data;
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static Result<String> success() {
        return new Result(RestCode.SUCCESS.getCode(), "操作成功");
    }

    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public static <T> Result<T> success(T data) {
        return new Result(RestCode.SUCCESS.getCode(), data, "操作成功");
    }

    /**
     * 返回成功消息
     *
     * @param message 返回内容
     * @return 成功消息
     */
    public static <T> Result<T> success(String message) {
        return new Result(RestCode.SUCCESS.getCode(), message);
    }

    /**
     * 返回成功消息
     *
     * @param message  返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static <T> Result<T> success(String message, T data) {
        return new Result(RestCode.SUCCESS.getCode(), data, message);
    }

    public static <T> Result<T> custom(int status, T t, String message) {
        return new Result(status, t, message);
    }

    public static <T> Result<T> custom(int status, String message) {
        return new Result(status, message);
    }

    public static <T> Result<T> error(T t, String message) {
        return new Result(RestCode.FAIL.getCode(), t, message);
    }

    public static <T> Result<T> error(String message) {
        return new Result(RestCode.FAIL.getCode(), message);
    }


    public static Result<String> error() {
        return new Result(RestCode.FAIL.getCode(), "操作失败");
    }

    /**
     * 返回错误消息
     *
     * @param code 状态码
     * @param message  返回内容
     * @return 警告消息
     */
    public static Result<String> error(int code, String message) {
        return new Result(code, message);
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getmessage() {
        return message;
    }

    public void setmessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
